/*
依赖倒转原则：
A:高层模块不应该依赖低层模块，二者都应该依赖抽象
B:抽象不应该依赖细节，细节应该依赖抽象

依赖倒转其实可以说是面向对象设计的标志，用哪种语言来编写程序不重要，
如果编写时考虑的都是如何针对抽象编程而不是针对细节编程，
即程序中所有的依赖关系都是终止于抽象类或者接口，那就是面向对象的设计，反之那就是过程化的设计了

我们要做新项目时，发现业务逻辑的高层模块都是一样的，但客户却希望使用不同的数据库或存储信息方式，
这时就出现麻烦了。我们希望能再次利用这些高层模块，但高层模块都是与低层的访问数据库绑定在一起的，
没办法复用这些高层模块，这就非常糟糕了。就像刚才说的，PC里如果CPU、内存、硬盘都需要依赖具体的主板，
主板一坏，所有的部件就都没用了，这显然不合理。反过来，如果内存坏了，也不应该造成其他部件不能用才对。
而如果不管高层模块还是低层模块，它们都依赖于抽象，具体一点就是接口或抽象类，只要接口是稳定的，
那么任何一个的更改都不用担心其他受到影响，这就使得无论高层模块还是低层模块都可以很容易地被复用。
这才是最好的办法。

程杰. 大话设计模式
*/

package main
